package com.hsurosy.hsuchain.nft.order.domain.service;

import com.hsurosy.hsuchain.nft.order.domain.entity.TradeOrder;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hsurosy.hsuchain.nft.order.infrastructure.mapper.OrderMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Nullable;

/**
 * 订单读取服务
 *
 * @Author Hsu琛君珩
 * @Date 2024-10-05 17:51
 * @Description
 * @Version: v1.0.0
 */
@Service
public class OrderReadService extends ServiceImpl<OrderMapper, TradeOrder> {

    @Autowired
    private OrderMapper orderMapper;

    /**
     * 按订单号查询订单信息
     * <p>
     * 通过订单号查询对应的订单信息。
     *
     * @param orderId 订单ID
     * @return TradeOrder 查询到的订单信息
     */
    public TradeOrder getOrder(String orderId) {
        return orderMapper.selectByOrderId(orderId);
    }

    /**
     * 按订单号和买家ID查询订单信息
     * <p>
     * 根据订单号和买家ID查询订单，确保订单的买家身份。
     *
     * @param orderId  订单ID
     * @param buyerId  买家ID
     * @return TradeOrder 查询到的订单信息
     */
    public TradeOrder getOrder(String orderId, String buyerId) {
        return orderMapper.selectByOrderIdAndBuyer(orderId, buyerId);
    }

    /**
     * 分页查询已超时订单
     * <p>
     * 根据买家ID尾号进行分页查询所有已超时的订单，查询结果按状态和时间进行筛选。
     *
     * @param currentPage        当前页码
     * @param pageSize           每页记录数
     * @param buyerIdTailNumber  买家ID的尾号（可选）
     * @return Page<TradeOrder> 分页查询结果
     */
    public Page<TradeOrder> pageQueryTimeoutOrders(int currentPage, int pageSize, @Nullable String buyerIdTailNumber) {
        Page<TradeOrder> page = new Page<>(currentPage, pageSize);

        // TODO: 根据状态、时间、用户id分页查询已超时订单
        return this.page(page, null);
    }

    /**
     * 分页查询待确认订单
     * <p>
     * 根据买家ID尾号进行分页查询所有待确认的订单，查询结果按状态和时间进行筛选。
     *
     * @param currentPage        当前页码
     * @param pageSize           每页记录数
     * @param buyerIdTailNumber  买家ID的尾号（可选）
     * @return Page<TradeOrder> 分页查询结果
     */
    public Page<TradeOrder> pageQueryNeedConfirmOrders(int currentPage, int pageSize, @Nullable String buyerIdTailNumber) {
        Page<TradeOrder> page = new Page<>(currentPage, pageSize);

        // TODO: 根据状态、时间、用户id分页查询待确认订单
        return this.page(page, null);
    }
}
